package ASAExpression;

import application.FunctionStack;
import application.Memory;
import exceptions.ExecutionException;

/**
 * Classe representant la décrémentation 
 * d'une variable
 * @author D.romain
 * @author O.riad
 */
public class ASADecrement extends ASAExpr {

    private ASAVariable e1;
    
    /**
     * Contructeur prenant en paramètre
     * la variable à décrémenter
     * @param e1 Variable
     */
    public ASADecrement(ASAVariable e1){
        this.e1 = e1;
    }
    
    /**
     * Retourne l'expression (Variable)
     * @return ASAExpr
     */
    @Override
    public ASAExpr getExpr1() {
        return e1;
    }

    /**
     * NON IMPLEMENTEE
     * @return null
     */
    @Override
    public ASAExpr getExpr2() {
        return null;
    }
    
    /**
     * Evalue l'expression en décrémentant la
     * variable de 1 (+ gestion de la mémoire)
     * @return valeur decrementée 
     */
    @Override
    public int evalue() throws ExecutionException {
        int dec = e1.evalue()-1;
        Memory.add(FunctionStack.getExecCurrentFunction(), this.e1.getVariableName(), dec);
        return dec;
    }

    /**
     * Permet l'affichage de la decrementation
     * @return String valeur décrémentée 
     */
    @Override
    public String getLabelExplorateur() throws ExecutionException {
        return "DECREMENT " + this.evalue();
    }
    
}
